home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Programming Windows 95
/
Programming Windows 95.iso
/
code
/
CHAP12
/
STATBAR.C
< prev
next >
Wrap
C/C++ Source or Header
|
1995-12-31
|
6KB
|
186 lines
/*-------------------------------------------
STATBAR.C -- Status bar helper functions.
(c) Paul Yao, 1996
-------------------------------------------*/
#include <windows.h>
#include <commctrl.h>
#include "comcthlp.h"
#include "gadgets.h"
typedef struct tagPOPUPSTRING
{
HMENU hMenu ;
UINT uiString ;
} POPUPSTRING ;
#define MAX_MENUS 5
static POPUPSTRING popstr[MAX_MENUS] ;
DWORD dwStatusBarStyles = WS_CHILD | WS_VISIBLE |
WS_CLIPSIBLINGS | CCS_BOTTOM |
SBARS_SIZEGRIP ;
extern HINSTANCE hInst ;
extern HWND hwndStatusBar ;
//-------------------------------------------------------------------
HWND InitStatusBar (HWND hwndParent)
{
HWND hwndSB ;
// Initialize values for WM_MENUSELECT message handling
HMENU hMenu = GetMenu (hwndParent) ;
HMENU hMenuTB = GetSubMenu (hMenu, 2) ;
HMENU hMenuSB = GetSubMenu (hMenu, 3) ;
popstr[0].hMenu = 0 ;
popstr[0].uiString = 0 ;
popstr[1].hMenu = hMenu ;
popstr[1].uiString = IDS_MAIN_MENU ;
popstr[2].hMenu = hMenuTB ;
popstr[2].uiString = IDS_TOOLBAR_MENU ;
popstr[3].hMenu = hMenuSB ;
popstr[3].uiString = IDS_STATUSBAR_MENU ;
popstr[4].hMenu = 0 ;
popstr[4].uiString = 0 ;
hwndSB = CreateStatusWindow (dwStatusBarStyles,
"Ready",
hwndParent,
2) ;
return hwndSB ;
}
//-------------------------------------------------------------------
void static FlipStyleFlag (LPDWORD dwStyle, DWORD flag)
{
if (*dwStyle & flag) // Flag on -- turn off
{
*dwStyle &= (~flag) ;
}
else // Flag off -- turn on
{
*dwStyle |= flag ;
}
}
//-------------------------------------------------------------------
HWND RebuildStatusBar (HWND hwndParent, WORD wFlag)
{
HWND hwndSB ;
RECT r ;
switch (wFlag)
{
case IDM_STAT_SIZEGRIP :
FlipStyleFlag (&dwStatusBarStyles, SBARS_SIZEGRIP) ;
break ;
case IDM_STAT_TOP :
dwStatusBarStyles &= 0xFFFFFFFC ;
dwStatusBarStyles |= CCS_TOP ;
break ;
case IDM_STAT_BOTTOM :
dwStatusBarStyles &= 0xFFFFFFFC ;
dwStatusBarStyles |= CCS_BOTTOM ;
break ;
case IDM_STAT_NOMOVEY :
dwStatusBarStyles &= 0xFFFFFFFC ;
dwStatusBarStyles |= CCS_NOMOVEY ;
break ;
case IDM_STAT_NOPARENTALIGN :
FlipStyleFlag (&dwStatusBarStyles, CCS_NOPARENTALIGN) ;
break ;
case IDM_STAT_NORESIZE :
FlipStyleFlag (&dwStatusBarStyles, CCS_NORESIZE) ;
break ;
}
hwndSB = InitStatusBar (hwndParent) ;
// Post parent a WM_SIZE message to resize children
GetClientRect (hwndParent, &r) ;
PostMessage (hwndParent, WM_SIZE, 0,
MAKELPARAM (r.right, r.bottom)) ;
return hwndSB ;
}
//-------------------------------------------------------------------
void StatusBarMessage (HWND hwndSB, WORD wMsg)
{
switch (wMsg)
{
case IDM_ST_GETBORDERS :
{
char ach[180] ;
int aiBorders[3] ;
Status_GetBorders (hwndSB, &aiBorders) ;
wsprintf (ach, "Horiz Width = %d\n"
"Vert Width = %d\n"
"Separator Width = %d",
aiBorders[0], aiBorders[1],
aiBorders[2]) ;
MessageBox (GetParent (hwndSB), ach,
"SB_GETBORDERS", MB_OK) ;
break ;
}
case IDM_ST_GETPARTS :
{
char ach[80] ;
int nParts = Status_GetParts (hwndSB, 0, 0) ;
wsprintf (ach, "Part Count = %d", nParts) ;
MessageBox (GetParent (hwndSB), ach,
"SB_GETPARTS", MB_OK) ;
break ;
}
case IDM_ST_SETTEXT :
Status_SetText (hwndSB, 0, 0,
"SB_SETTEXT Message Sent") ;
break;
case IDM_ST_SIMPLE :
{
static BOOL bSimple = TRUE ;
Status_Simple (hwndSB, bSimple) ;
bSimple = (!bSimple) ;
break ;
}
}
}
//-------------------------------------------------------------------
LRESULT
Statusbar_MenuSelect (HWND hwnd, WPARAM wParam, LPARAM lParam)
{
UINT fuFlags = (UINT) HIWORD (wParam) ;
HMENU hMainMenu = NULL ;
int iMenu = 0 ;
// Handle non-system popup menu descriptions.
if ((fuFlags & MF_POPUP) &&
(!(fuFlags & MF_SYSMENU)))
{
for (iMenu = 1 ; iMenu < MAX_MENUS ; iMenu++)
{
if ((HMENU) lParam == popstr[iMenu].hMenu)
{
hMainMenu = (HMENU) lParam ;
break ;
}
}
}
// Display helpful text in status bar
MenuHelp (WM_MENUSELECT, wParam, lParam, hMainMenu, hInst,
hwndStatusBar, (UINT *) &popstr[iMenu]) ;
return 0 ;
}